package com.yifang.yibingproject.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 返回包装工具类
 */
public class ResultUtils {

    /**
     * @return 返回操作成功的标志
     */
    public static Result success() {
        return success(null);
    }

    /**
     * @param t
     * @param <T>
     * @return 返回操作成功的封装结果
     */
    private static <T> Result<T> success(T t) {
        return new Result<>(0, "成功", t);
    }

    /**
     * @param data 数据
     * @param <T>  数据类型
     * @return 返回操作成功或查询的数据，如果数据为空将报错
     */
    public static <T> Result<T> data(T data) {
        if (data == null)
            return new Result<>(0, "成功", null);
        return success(data);
    }

    /**
     * @param list 列表
     * @param <T>  数据类型
     * @return 返回查询列表的数据，如果list为null，则返回空的list
     */
    public static <T> Result<List<T>> list(List<T> list) {
        if (list == null)
            return success(new ArrayList<>());
        return success(list);
    }

    /**
     * @param page 分页
     * @param <T>  数据类型
     * @return 返回查询分页的数据，如果分页记录为null，则重置为空的记录
     */
    public static <T> Result<Page<T>> page(Page<T> page) {
        if (page.getRecords() == null)
            page.setRecords(Collections.emptyList());
        return success(page);
    }

    /**
     * @param code 返回码
     * @param msg  错误消息
     * @return 返回操作失败的结果
     */
    public static Result fail(Integer code, String msg) {
        return new Result<>(code, msg, null);
    }
}
